#ifndef __TIMEOUT_MANAGER_H__
#define __TIMEOUT_MANAGER_H__
#include "ringQueue/ringQueue.h"
#include "../log/systemLog/systemLog.h"
#include <pthread.h> // 包含 pthread.h

// 超时回调函数类型定义
typedef void (*timeout_callback_t)(int fd);

// 超时管理器结构体
typedef struct timeout_manager_s
{
    ring_queue_t ring_queue;             // 环形队列
    hash_map_t position_map;             // 全局位置的映射
    timeout_callback_t timeout_callback; // 超时回调函数指针
    pthread_mutex_t mutex;               // 为超时管理器添加专用互斥锁
} timeout_manager_t;

extern timeout_manager_t g_timeout_manager; // 声明全局变量

/**
 * @brief 初始化超时管理器
 *
 * @param manager 需要初始化的超时管理器
 * @param queue_capacity 环形队列容量
 * @param set_size 每个哈希集合的大小
 * @param map_size 全局位置映射哈希表大小
 * @param callback 超时回调函数
 * @return system_error_code_t 初始化结果
 */
system_error_code_t timeout_manager_init(timeout_manager_t *manager, int queue_capacity, int set_size, int map_size, timeout_callback_t callback);

/**
 * @brief 更新文件描述符的活动时间
 *
 * @param manager 超时管理器
 * @param fd 文件描述符
 * @return system_error_code_t 更新结果
 */
system_error_code_t timeout_manager_update_user_activity(timeout_manager_t *manager, int fd);

/**
 * @brief 超时管理器的时钟滴答函数
 *
 * @param manager 超时管理器
 * @return system_error_code_t 滴答结果
 */
system_error_code_t timeout_manager_tick(timeout_manager_t *manager);

#endif // __TIMEOUT_MANAGER_H__